/*
 * Copyright (c) 2010 Zauber S.A.  -- All rights reserved
 */
package ar.edu.itba.ia2010.geneticos.motor.api.corte;

import java.util.List;

import org.apache.commons.lang.Validate;

import ar.edu.itba.ia2010.geneticos.motor.api.Cromosoma;
import ar.edu.itba.ia2010.geneticos.motor.api.EstrategiaCorte;

/**
 * Estrategia de corte que permite cortar "bruscamente" una simulacion
 * 
 * @author Juan F. Codagnone
 * @since Apr 4, 2010
 * @param <C> Tipo del gen
 */
public class ShutdownNowEstrategiaCorteDecorator<C> implements EstrategiaCorte<C> {
    private final EstrategiaCorte<C> target;
    private boolean live = true;
    
    /** Creates the ShutdownNowEstrategiaCorteDecorator. */
    public ShutdownNowEstrategiaCorteDecorator(final EstrategiaCorte<C> target) {
        Validate.notNull(target);
        
        this.target = target;
    }
    
    /** @see EstrategiaCorte#nextAge(List) */
    public final boolean nextAge(final List<Cromosoma<C>> poblacion) {
        return live ? target.nextAge(poblacion) : false;
    }

    /** termina la simulacion */
    public final void shutdown() {
        live = false;
    }
}
